/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package dao;
import java.io.Serializable;
import entity.Usuario;
import java.util.Iterator;
import java.util.List;
import javax.management.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import utils.HibernateUtil;

/**
 *
 * @author NAYELI
 */
public class UsuarioDAO implements Serializable{


     
    




          
    public static void main(String... a) {
    }
      // UsuarioDAO.getUsuarioByName("Da");
        //PerfilUsuarioEntity pu=new PerfilUsuarioEntity();
       // pu.setIdperfil(3);
            /* Usuario eUsuario = new Usuario();
            System.out.println("++++++++++++++++++ U S U A R I O ++++++++++++++++++");
            eUsuario.setIdUsuario("dcarmona@matersys.com");
            eUsuario.setNombre("Dalia");
            eUsuario.setApellidoPaterno("Carmona");
            eUsuario.setApellidoMaterno("Martinez");
            eUsuario.setPassword("password");
            eUsuario.setStatus(1);
            eUsuario.setTipoUsuario(1);
 
            //eUsuario.setPerfilUsuario(pu);
            UsuarioDAO.guardaUsuario(eUsuario);

           */
             
            // UsuarioDAO.getUsuarioByIDandPassword("chelis_17bsb@hotmail","primavera");
         //Usuario usuarioModif=new Usuario();
         //usuarioModif.setIdusuario(53);
         //usuarioModif.setNombreusuario("Ana Laura");
        //UsuarioDAO.ModificarUsuarioByName(usuarioModif);
//    }



        
            //public static synchronized Usuario getUsuarioByIDandPassword(String idUsuario,String password){
//
//		Session session = HibernateUtil.getSessionFactory().openSession();
//		Usuario usuario=null;
//		try{
  //                       String consulta="FROM Usuario WHERE idusuario="+"'"+idUsuario;
   //                      Query q=(Query)session.createQuery(consulta);
     //                     List usuarios=(List)q;
       //                   Iterator iterador=usuarios.listIterator(); //Le solicito a la lista que me devuelva un iterador con todos los el elementos contenidos en ella
         //                  while(iterador.hasNext() ) {
           //                        Usuario u=(Usuario)iterador.next();
                                  // System.out.println(u.getIdUsuario()+" "+u.getPassword());


    /*  public static Usuario getUsuarioByName(String nombreUsuario){
        Session session = HibernateUtil.getSessionFactory().openSession();
	Usuario usuario=null;
            try{
                String consulta="FROM UsuarioEntity U WHERE U.nombreusuario LIKE '"+nombreUsuario+"%'";
                Query q=(Query) session.createQuery(consulta);
>>>>>>> .r8
                         // List usuarios=q.list();
                         // Iterator iterador =usuarios.listIterator(); //Le solicito a la lista que me devuelva un iterador con todos los el elementos contenidos en ella
                          //  while(iterador.hasNext() ) {
                                 //    Usuario u=(Usuario)iterador.next();
                               //      System.out.println(u.getApellidomaterno());
                                     //Obtengo el elemento contenido

                      }
                          System.out.println(usuarios.isEmpty()+"****************** L I S T A ***************");
                          session.close();
	     }catch(org.hibernate.exception.GenericJDBCException excepts){
			   if(session!= null&& session.isOpen())
				session.close();

	     }catch(Exception e){
			if(session!= null&& session.isOpen())
			     session.close();

	     }finally{
		      if(session!= null && session.isOpen())
			   session.close();



	    }
		return usuario;
	}
           
            //Método que busca a un usuario por ID

    	public static synchronized Usuario getUsuarioPorID(int idusuario){
		Session session = HibernateUtil.getSessionFactory().openSession();
		Usuario usuario=null;
		try{
			String query="FROM Usuario where idUsuario="+idusuario;
			usuario=(Usuario)session.createQuery(query).uniqueResult();
			session.close();
		}catch(org.hibernate.exception.GenericJDBCException excepts){
			if(session!= null&& session.isOpen())
				session.close();

		}catch(Exception e){
			if(session!= null&& session.isOpen())
				session.close();

		} finally{
			if(session!= null && session.isOpen())
				session.close();
		}
		return usuario;
	}
*/


   public static synchronized String guardaUsuario(Usuario usuario) {
        Session session = null;
        Transaction transaction = null;
        try {

            session = HibernateUtil.getSessionFactory().openSession();
            // perfilUsua=(PerfilUsuarioEntity) session.load(PerfilUsuarioEntity.class,new Integer(perfilUsuario.getIdperfil()));

            transaction = session.beginTransaction();
            session.save(usuario);
            transaction.commit();
            session.close();
            return usuario.getIdUsuario();
            
        } catch (org.hibernate.exception.GenericJDBCException excepts) {
            transaction.rollback();
            if (session != null && session.isOpen()) {
                session.close();
            }
            return "";
        } catch (Exception e) {
            transaction.rollback();
            if (session != null && session.isOpen()) {
                session.close();
            }
            return "";
        } finally {
            if (session != null && session.isOpen()) {
                session.close();
            }

        }

    }

   //Método que se encarga de eliminar un perfil de usuario por id del perfil.
      public static synchronized void eliminaUsuario(String idUsuario) {
        Session session = null;
        Transaction transaction = null;

        try {
            session = HibernateUtil.getSessionFactory().openSession();
            transaction = session.beginTransaction();
            System.out.println("Iniciando transaction de borrado");

           // UsuarioEntity usuario=getUsuarioPorID(idUsuario);
            //session.delete(usuario);
            transaction.commit();

            session.close();
        } catch (org.hibernate.exception.GenericJDBCException excepts) {
            transaction.rollback();

            if (session != null && session.isOpen()) {
                session.close();
            }

        } catch (Exception e) {
            transaction.rollback();

            if (session != null && session.isOpen()) {
                session.close();
            }

        } finally {
            if (session != null && session.isOpen()) {
                session.close();
            }

        }
    }

     //Método que se encarga de consultar una lista de Usuarios.
        public static List<Usuario> getAllUsuarios(){
		Session session = HibernateUtil.getSessionFactory().openSession();
		List <Usuario>lista=null;
		try{
			String query ="FROM Usuario";
			lista=session.createQuery(query).list();
			session.close();
		}catch(org.hibernate.exception.GenericJDBCException excepts){
			if(session!= null&& session.isOpen())
				session.close();

		}catch(Exception e){
			if(session!= null&& session.isOpen())
				session.close();

		} finally{
			if(session!= null && session.isOpen())
				session.close();

		}
		return lista;
	}
         //Método para modificar un Perfil de usuario por ID
         public static synchronized void ModificarUsuarioByName(Usuario usuario){

		Session session = null;
		Transaction transaction =null;

		try{
			 session=HibernateUtil.getSessionFactory().openSession();
			 transaction=session.beginTransaction();
		         //Usuario usu=(UsuarioEntity)session.load(UsuarioEntity.class,new Integer(usuario.getIdusuario()));

                        // Usuario unUsuario=(UsuarioEntity)session.load(UsuarioEntity.class,new Integer(usu.getIdusuario()));
                         // Cambiamos una propiedad del objeto
                         //unUsuario.setNombreusuario(usuario.getNombreusuario());

                         // Lo modificamos en la base de datos
                         //session.update(unUsuario);
			 transaction.commit();
			 session.close();

		} catch (org.hibernate.exception.GenericJDBCException excepts) {
            transaction.rollback();

            if (session != null && session.isOpen()) {
                session.close();
            }

        } catch (Exception e) {
            transaction.rollback();

            if (session != null && session.isOpen()) {
                session.close();
            }

        } finally {
            if (session != null && session.isOpen()) {
                session.close();
            }

        }
    }


         //Método que obtiene el IdUsuario y password y devuelve un Entity de tipo Usuario
      /*   public static synchronized Usuario(String idUsuario, String password){
             Session session = HibernateUtil.getSessionFactory().openSession();
		Usuario usuario=null;
		try{
			String query =" FROM  Usuario where idperfil="+idsuario;
			usuario=(Usuario)session.createQuery(query).uniqueResult();
			session.close();
		}catch(org.hibernate.exception.GenericJDBCException excepts){
			if(session!= null&& session.isOpen())
				session.close();

		}catch(Exception e){
			if(session!= null&& session.isOpen())
				session.close();

		} finally{
			if(session!= null && session.isOpen())
				session.close();

		}
		return usuario;


         }*/
    


    //Método que obtiene el IdUsuario y password y devuelve un Entity de tipo Usuario
    public static Usuario getUsuarioByIdAndPass(String idUsuario, String password){
        Session session = HibernateUtil.getSessionFactory().openSession();
        Usuario usuario=null;
        //List<Usuario> lista=null;
        try{
            String query ="FROM Usuario as U where U.idUsuario='"+idUsuario+"' AND U.password='"+password+"'";
            //lista = session.createQuery(query).list();
            usuario = (Usuario)session.createQuery(query).uniqueResult();
            session.close();
        }catch(org.hibernate.exception.GenericJDBCException excepts){
            if(session!= null&& session.isOpen())
                session.close();
        }catch(Exception e){
            if(session!= null&& session.isOpen())
                session.close();
        } finally{
            if(session!= null && session.isOpen())
                session.close();
        }
        return usuario;
    }

    public static List<Usuario> getUsuarioByName(String name){
        Session session = HibernateUtil.getSessionFactory().openSession();
        //Usuario usuario=null;
        List<Usuario> lista=null;
        try{
            String query ="FROM Usuario as U where U.nombre LIKE '%"+name+"%' or U.apellidoPaterno LIKE '%"+name+"%' OR U.apellidoMaterno LIKE '%"+name+"%'";
            //lista = session.createQuery(query).list();
            lista = session.createQuery(query).list();
            session.close();
        }catch(org.hibernate.exception.GenericJDBCException excepts){
            if(session!= null&& session.isOpen())
                session.close();
        }catch(Exception e){
            if(session!= null&& session.isOpen())
                session.close();
        } finally{
            if(session!= null && session.isOpen())
                session.close();
        }
        return lista;
    }

    public static List<Usuario> getUsuariosNuevos(){
        Session session = HibernateUtil.getSessionFactory().openSession();
        //Usuario usuario=null;
        List<Usuario> lista=null;
        try{
            String query ="FROM Usuario as U where U.password='na'";
            //lista = session.createQuery(query).list();
            lista = session.createQuery(query).list();
            session.close();
        }catch(org.hibernate.exception.GenericJDBCException excepts){
            if(session!= null&& session.isOpen())
                session.close();
        }catch(Exception e){
            if(session!= null&& session.isOpen())
                session.close();
        } finally{
            if(session!= null && session.isOpen())
                session.close();
        }
        return lista;
    }
     

}
    

  
     
